package hust.music.service;

import hust.music.entity.*;
import hust.music.util.DynamicInfo;

import java.util.List;
import java.util.Map;

/**
 * HomePageModService
 * 
 * @author Txazo
 * @since 1.0
 */
public interface HomePageModService {

	/**
	 * 获取用户关注的人的动态信息
	 * 
	 * @param user 用户
	 * @param firstResult 开始记录
	 * @param maxResult 查询记录数
	 * @return 用户关注的人的动态信息
	 */
	public List<DynamicInfo> getFollowDynamicInfo(User user, int firstResult,
			int maxResult);

	/**
	 * 获取用户关注的人的动态信息总数
	 * 
	 * @param user 用户
	 * @return 用户关注的人的动态信息总数
	 */
	public int getTotalFollowDynamicInfo(User user);

	/**
	 * 获取关注粉丝分享数
	 * 
	 * @param user 用户
	 * @param firstResult 开始记录
	 * @param maxResult 查询记录数
	 * @return 关注粉丝分享数
	 */
	public Map<String, Integer> getPersonalCount(User user);

	/**
	 * 获取用户流派集
	 * 
	 * @param user 用户
	 * @return 用户流派集
	 * @throws Exception
	 */
	public List<DynamicInfo> getPlayList(User user) throws Exception;

	/**
	 * 获取用户留言
	 * 
	 * @param user 用户
	 * @param firstResult 开始记录
	 * @param maxResult 查询记录数
	 * @return 用户留言
	 * @throws Exception
	 */
	public List<DynamicInfo> getMessage(User user, int firstResult,
			int maxResult) throws Exception;

	/**
	 * 获取用户留言总数
	 * 
	 * @param user 用户
	 * @return 用户留言总数
	 */
	public int getTotalMessage(User user);

	/**
	 * 获取用户关注的人
	 * 
	 * @param user 用户
	 * @param firstResult 开始记录
	 * @param maxResult 查询记录数
	 * @return 用户关注的人
	 * @throws Exception
	 */
	public List<DynamicInfo> getFollow(User user, int firstResult, int maxResult)
			throws Exception;

	/**
	 * 获取用户好友
	 * 
	 * @param user 用户
	 * @param firstResult 开始记录
	 * @param maxResult 查询记录数
	 * @return 用户好友
	 * @throws Exception
	 */
	public List<DynamicInfo> getFriend(User user, int firstResult, int maxResult)
			throws Exception;

	/**
	 * 获取用户提醒
	 * 
	 * @param user 用户
	 * @param firstResult 开始记录
	 * @param maxResult 查询记录数
	 * @return 用户提醒
	 */
	public Map<String, DynamicInfo> getRemind(User user, int firstResult,
			int maxResult);

	/**
	 * 获取用户最近上传的音乐
	 * 
	 * @param user 用户
	 * @param firstResult 开始记录
	 * @param maxResult 查询记录数
	 * @return 用户最近上传的音乐
	 */
	public List<DynamicInfo> getRecentUploadMusic(User user, int firstResult,
			int maxResult);

	/**
	 * 获取用户好友粉丝榜
	 * 
	 * @param user 用户
	 * @param firstResult 开始记录
	 * @param maxResult 查询记录数
	 * @return 用户好友粉丝榜
	 */
	public List<DynamicInfo> getFanRank(User user, int firstResult,
			int maxResult);

	/**
	 * 获取用户音乐收听榜
	 * 
	 * @param user 用户
	 * @param firstResult 开始记录
	 * @param maxResult 查询记录数
	 * @return 用户音乐收听榜
	 */
	public List<DynamicInfo> getMusicListeningRank(User user, int firstResult,
			int maxResult);

	/**
	 * 是否关注
	 * 
	 * @param user 用户1
	 * @param home 用户2
	 * @return number
	 */
	public int getIsFollow(User user, User home);

	/**
	 * 是否好友
	 * 
	 * @param user 用户1
	 * @param home 用户2
	 * @return number
	 */
	public int getIsFriend(User user, User home);

	/**
	 * 添加或删除关注
	 * 
	 * @param user 用户1
	 * @param home 用户2
	 * @return number
	 */
	public int updateFollow(User user, User home);

	/**
	 * 申请或删除好友
	 * 
	 * @param user 用户1
	 * @param home 用户2
	 * @param isDelete 是否删除好友标识
	 * @return number
	 */
	public int updateFriend(User user, User home, int isDelete);

	/**
	 * 获取用户的动态信息
	 * 
	 * @param user 用户
	 * @param firstResult 开始记录
	 * @param maxResult 查询记录数
	 * @return 用户的动态信息
	 */
	public List<DynamicInfo> getUserDynamicInfo(User user, int firstResult,
			int maxResult);

	/**
	 * 获取用户的动态信息总数
	 * 
	 * @param user 用户
	 * @return 用户的动态信息总数
	 */
	public int getTotalUserDynamicInfo(User user);

	public int getTotalMusicsInfo(User user);
	
	public boolean aggreeFriend(Integer id);
	
	public boolean refuseFriend(Integer id);
}